<?
/**
 * Clase encargada de las búsquedas y listados de Storage.
 * 
 * Además, obtiene dela BBDD las opciones necesarias para los desplegables en las interfaces de búsqueda.
 * 
 * @package core
 * @version 0.1
 * @author 
 * Juan Ramón González Hidalgo
 * 
 * María José Prieto García
 * 
 * José Ignacio Ortiz de Galisteo Romero
 */
class ListaCanciones implements IIterador{

	/**
	 * Almacena el resultado de la búsqueda de Cancion.
	 * 
	 * @see buscar()
	 * @var unknown_type
	 */
	private $result;

	/**
	 * Almacena el número de resultados obtenidos, independientemente de
	 * la cláusula LIMIT.
	 * @var integer
	 */
	private $num_rows=0;
	
	/**
	 * Objeto de conexión a la BBDD.
	 * @var MySQL
	 */
	private $MySQL;
	
	/**
	 * Constructor.
	 * Inicializa la conexión a la BBDD.
	 */
	public function __construct(){
            $this->MySQL = new MySQL('MYLIED');
	}
	
	/**
	 * Devuelve el número de Cancion almacenado en la búsqueda.
	 * 
	 * Si no se ha lanzado previamente una búsqueda, el valor devuelto será NULL.
	 * 
	 * @see buscar()
	 * @return integer $num_resultados Número de Cancion encontrados en buscar()
	 */
	public function num_Resultados(){
            return $this->num_rows;
	}

	/**
	 * Devuelve el puntero al inicio de la lista de Cancion.
	 */
	public function inicio(){
            mysql_data_seek($this->result, 0);
	}

	/**
	 * Devuelve el siguiente Cancion en la lista y avanza el puntero.
	 * 
	 * Devuelve NULL si ya se ha llegado al último elemento.
	 * 
	 * @return Cancion $Cancion El siguiente storage en la lista.
	 */
	public function siguiente(){
            if($row = @mysql_fetch_row($this->result))
                $id_storage = $row[0];
            else
                return null;

            return new Cancion($id_storage);
	}

	/**
	 * Lanza la búsqueda de Cancion aplicando los filtros pasados como parámetro.
	 * 
	 * La variable local $result es actualizada con el resultado de la búsqueda.
	 * 
	 * @param array $filtros Lista de filtros a aplicar a la búsqueda de Cancion.
	 */
	public function buscar($filtros=null, $inicio=0, $tam_pagina=0){
            //FB::warn($filtros);FB::warn($inicio);FB::warn($tam_pagina);
		
            $Validar = new Validar();
            $filtro = "";
            $join = "";
            $join_lista = "";
            if(isset($filtros['solo_hoy'])){
                $filtro .= " AND canciones.fecha >= '".  Fechas::fechaActualTimeStamp()."' ";
            }else{

                if(isset($filtros['fav']))
                    $join = "INNER JOIN listas_favoritas ON listas_favoritas.fk_usuario = '".$filtros['fav_user']."' AND listas_favoritas.fk_cancion = canciones.id ";

                if(isset($filtros['id']))
                        $filtro .= " AND canciones.id = '".$filtros['id']."' ";

                if(isset($filtros['usuario']))
                        $filtro .= " AND canciones.fk_usuario = '".$filtros['usuario']."' ";

                if(isset($filtros['titulo']))
                        $filtro .= " AND canciones.titulo LIKE '%".$filtros['titulo']."%' ";

                if(isset($filtros['artista']))
                        $filtro .= " AND canciones.artista LIKE '%".$filtros['artista']."%' ";

                if(isset($filtros['titulo_artista']))
                        $filtro .= " AND (canciones.titulo LIKE '%".$filtros['titulo_artista']."%' OR canciones.artista LIKE '%".$filtros['titulo_artista']."%' OR canciones.fk_usuario LIKE '%".$filtros['titulo_artista']."%' )";

                if(isset($filtros['album']))
                        $filtro .= " AND canciones.album LIKE '%".$filtros['album']."%' ";

                if(isset($filtros['fecha_desde']) && $filtros['fecha_desde'] != '')
                        $filtro .= " AND canciones.fecha >= '".$filtros['fecha_desde']."' ";

                if(isset($filtros['fecha_hasta']) && $filtros['fecha_hasta'] != '')
                        $filtro .= " AND canciones.fecha <= '".$filtros['fecha_hasta']."' ";

                if(isset($filtros['generos'])){
                        $generos = implode(",",$filtros['generos']);
                        $join = " INNER JOIN canciones_rel_generos ON canciones.id = canciones_rel_generos.fk_cancion AND  canciones_rel_generos.fk_genero IN (".$generos.") ";
                }

                if(isset($filtros['lista_reproduccion'])){
                    $join_listas = "INNER JOIN canciones_listas ON canciones_listas.fk_cancion = canciones.id
                                                                AND canciones_listas.fk_lista_reproduccion= '".$filtros['lista_reproduccion']."' ";
                }

            }
            $order = " ORDER BY canciones.id DESC ";

            //Paginando...
            if($inicio!=0 || $tam_pagina!=0)
                $limit = " LIMIT $inicio,$tam_pagina ";

            $query = "SELECT SQL_CALC_FOUND_ROWS canciones.id
                            FROM canciones
                            $join
                            $join_listas
                            WHERE 1
                                    $filtro
                            GROUP BY canciones.id
                            $order
                            $limit; ";

             if($limit){
                 FB::info($filtros);
                 FB::info($query,'busqueda canciones');
             }
            $this->result = $this->MySQL->query($query);

            //Obtenemos el número total de resultados sin paginar:
            $calc_num_rows = mysql_query("SELECT FOUND_ROWS();");
            $array_num_rows = mysql_fetch_array($calc_num_rows);
            $this->num_rows = $array_num_rows[0];
					
	}
	
	public function lista_Generos(){
            $lista = array();
            $query = "SELECT * FROM generos_canciones order by nombre;";
            $rs = $this->MySQL->query($query);

            while($row = mysql_fetch_array($rs)){
                    $lista[$row['id']] = $row['nombre'];
            }

            return $lista;
	}
	public function lista_Usuarios(){
            $lista = array();
            $query = "SELECT * FROM usuarios order by id;";
            $rs = $this->MySQL->query($query);

            while($row = mysql_fetch_array($rs)){
                    $lista[] = $row['id'];
            }

            return $lista;
	}
}
?>